package com.akbar.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.Map;

public class JwtUtil {

    /*
    * 生成jwt
    * */
    public static String createJWT(String secretKey, Long ttlMillis, Map<String, Object> claims) {
        // 签名算法
        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
        // 过期时间
        long expMills = System.currentTimeMillis() + ttlMillis;
        Date exp = new Date(expMills);

        // 设置jwt的body
        /*
        * Jwts是带签名的jwt
        * */
        JwtBuilder builder = Jwts.builder()
                .setClaims(claims)
                .signWith(SignatureAlgorithm.HS256, secretKey.getBytes(StandardCharsets.UTF_8))
                .setExpiration(exp);
        return builder.compact();
    }


    /*
    * token解密
    * */
    public static Claims parseJWT(String secretKey, String token) {
        return Jwts.parser()
                .setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8))
                // 注意要使用parseClaimsJws，而不是parseClaimsJwt
                .parseClaimsJws(token).getBody();
    }
}
